package br.com.aerusc.gui.forms;

import java.util.Arrays;
import java.util.logging.Logger;

import br.com.aerusc.entity.Jogador;
import br.com.aerusc.enumerators.EnumPosicoes;

import com.vaadin.data.Item;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.validator.StringLengthValidator;
import com.vaadin.ui.Component;
import com.vaadin.ui.DateField;
import com.vaadin.ui.DefaultFieldFactory;
import com.vaadin.ui.Field;
import com.vaadin.ui.Form;
import com.vaadin.ui.FormFieldFactory;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Select;
import com.vaadin.ui.TextField;

public class JogadorForm extends Form {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private GridLayout gridLayout;
	private static final Logger log = Logger.getLogger(JogadorForm.class.getName());

	public JogadorForm(BeanItem<Jogador> item) {
		setCaption("Dados do Jogador");
		gridLayout = new GridLayout(3, 3);
		gridLayout.setMargin(true, false, false, false);
		gridLayout.setSpacing(false);
		setWriteThrough(false);
		setInvalidCommitted(false);
		setItemDataSource(item);
		setFormFieldFactory(new JogadorFieldFactory());
		setVisibleItemProperties(Arrays.asList(new String[] { "nome", "endereco", "idade", "dataNascimento", "posicao", "email", "telefone", "numeroCarteira", "tipoSanguineo" }));

	}

	private class JogadorFieldFactory extends DefaultFieldFactory implements FormFieldFactory {

		private static final String COMMON_FIELD_WIDTH = "16em";

		@Override
		public Field createField(Item item, Object propertyId, Component uiContext) {
			Field f = super.createField(item, propertyId, uiContext);
			f.setWidth(COMMON_FIELD_WIDTH);
			if ("nome".equals(propertyId)) {
				TextField tf = (TextField) f;
				tf.setRequired(true);
				tf.focus();
				tf.setRequiredError("Por Favor informe o Nome do Jogador");
				tf.addValidator(new StringLengthValidator("O nome deve ter entre 3 e 50 caracteres", 3, 50, false));
			} else if ("endereco".equals(propertyId)) {
				TextField tf = (TextField) f;
				tf.setRequired(true);
				tf.setRequiredError("Por favor informe o Endereco do Jogador");
			} else if ("idade".equals(propertyId)) {
				TextField tf = (TextField) f;
				tf.setRequired(true);
				tf.setRequiredError("Por favor informe a Idade do Jogador");
			} else if ("dataNascimento".equals(propertyId)) {
				DateField df = (DateField) f;
				df.setRequiredError("Por favor informe a data de Nascimento do Jogador");
				df.setRequired(true);
			} else if("posicao".equals(propertyId)){
				Select select = new Select("Posicao");
				for(EnumPosicoes enumerator : EnumPosicoes.values()){
					select.addItem(enumerator.getCodigo());
					select.setItemCaption(enumerator.getCodigo(), enumerator.getDescricao());
				}
				select.setRequired(true);
				select.setRequiredError("Por favor informe a Posicao do Jogador");
				f = select;
			}
			if(f instanceof TextField){
				TextField tf = (TextField) f;
				tf.setNullRepresentation("");
			}

			return f;
		}

	}

}
